<?php
/**
 * 缓存管理类
 * 负责处理文件缓存
 */
class CacheManager {
    /**
     * @var string 缓存目录
     */
    private $cacheDir;
    
    /**
     * 构造函数
     * @param string $cacheDir 缓存目录
     */
    public function __construct($cacheDir = 'cache/') {
        $this->cacheDir = $cacheDir;
        // 确保缓存目录存在
        if (!is_dir($this->cacheDir)) {
            mkdir($this->cacheDir, 0755, true);
        }
    }
    
    /**
     * 获取或设置缓存
     * @param string|array $key 缓存键名
     * @param mixed $value 要缓存的值，为空时表示获取缓存
     * @return mixed 获取缓存时返回缓存内容，设置缓存时返回true
     */
    public function cache($key, $value = '') {
        if (is_array($key)) {
            $key = md5(implode('', $key));
        }
        
        $filename = $this->cacheDir . $key . '.cache';
        
        // 获取缓存
        if (empty($value)) {
            $this->clearExpiredCache();
            $data = @file_get_contents($filename);
            return $data ? json_decode($data, true) : null;
        } 
        // 设置缓存
        else {
            if (!is_array($value)) {
                $value = [$value];
            }
            return file_put_contents($filename, json_encode($value)) !== false;
        }
    }
    
    /**
     * 清理过期缓存
     * @return bool 是否成功清理
     */
    public function clearExpiredCache() {
        $date = date('Y-m-d');
        $cacheName = 'cachetime' . $date . '.c';
        $cacheFile = $this->cacheDir . $cacheName;
        
        // 如果今天已经清理过，则不再清理
        if (file_exists($cacheFile)) {
            return false;
        }
        
        // 清理所有缓存文件
        foreach (scandir($this->cacheDir) as $file) {
            if ($file != '.' && $file != '..' && strpos($file, '.c') > 0) {
                @unlink($this->cacheDir . $file);
            }
        }
        
        // 创建今日清理标记
        file_put_contents($cacheFile, '1');
        return true;
    }
}